package mfuny.ggongal.admin.ad;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import mfuny.ggongal.admin.Server;
import mfuny.ggongal.admin.gift.GiftCardDao;
import mfuny.ggongal.admin.gift.GiftDao;

import com.ibatis.sqlmap.client.SqlMapClient;

public class MissionDetail {
	// 타임&스페셜 게임 미션 전용.
	
	
	// 미션 - 점수구하기(꽁게임도 가능).
	public static int getScore_mission(String mission) {
		return Integer.parseInt(mission.split("/")[1]);
	}
	
	// 미션 - 꽁 제공량 구하기(꽁게임 전용).
	public static String getOfferGgong_mission(String mission) {
		return mission.split("/")[2];
	}

	// 미션 - 총 경품대상인원수 구하기.
	public static int getWinNum_mission(String mission) {
		String[] missions = mission.split("/")[2].split("\\|");
		int total = 0;

		for (int i = 0; i < missions.length; i++) {
			int start = Integer.parseInt(missions[i].split(",")[0]);
			int end = Integer.parseInt(missions[i].split(",")[1]);
			total += (Math.abs((start - end))) + 1;
		}

		return total;
	}
	
	// 미션 - 경품 - 경품종류/경품명 가져오기(DB이용).
	public static HashMap<String, Object> getGiftDetail_mission(String gift) throws Exception {
		SqlMapClient sqlMapper = Server.getSqlMapper();
		
		String giftType = gift.split(",")[2];
		String giftName = null;
		String giftId = null;
		
		if(giftType.equals("현물")) {
			giftId = gift.split(",")[3];
			giftName = (String) sqlMapper.queryForObject("gift_selectGiftName", giftId);
		} else if(giftType.equals("모바일상품권")) {
			giftId = gift.split(",")[3];
			giftName = (String)sqlMapper.queryForObject("card_selectCardName", Integer.parseInt(giftId));
//			giftName = gift.split(",")[3] + (gift.split(",").length > 4 ? "/" + gift.split(",")[4] + "원" : "");
		}
		
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		resultMap.put("giftId", giftId);
		resultMap.put("giftType", giftType);
		resultMap.put("giftName", giftName);
		return resultMap;
	}
	
	// 미션 - 특정 등수의 경품 가져오기(경품명까지 가져오기).
	public static HashMap<String, Object> getGiftDetailByRank2_mission(String mission, int rank) throws Exception {
		SqlMapClient sqlMapper = Server.getSqlMapper();
		
		String[] gifts = mission.split("/")[2].split("\\|");
		HashMap<String, Object> resultMap = new HashMap<String, Object>();
		
		for(int i = 0; i < gifts.length; i++) {
			for(int j = Integer.parseInt(gifts[i].split(",")[0]); j <= Integer.parseInt(gifts[i].split(",")[1]); j++) {
				if(j == rank) {
					
					String giftType = gifts[i].split(",")[2];
					String giftId = gifts[i].split(",")[3];
					String giftName = "";
					
					if(giftType.equals("현물")) {
						giftName = (String) sqlMapper.queryForObject("gift_selectGiftName", giftId);
					} else if(giftType.equals("모바일상품권")) {
						giftName = (String) sqlMapper.queryForObject("card_selectCardName", Integer.parseInt(giftId));
					}
					
					resultMap.put("giftType", giftType);
					resultMap.put("giftId", giftId);
					resultMap.put("giftName", giftName);
					break;
				}
			}
		}
		
		return resultMap;
	}
	
	// 미션 - 특정 등수의 경품 가져오기.
		public static HashMap<String, Object> getGiftDetailByRank_mission(String mission, int rank) {
			String[] gifts = mission.split("/")[2].split("\\|");
			HashMap<String, Object> resultMap = new HashMap<String, Object>();
			
			for(int i = 0; i < gifts.length; i++) {
				for(int j = Integer.parseInt(gifts[i].split(",")[0]); j <= Integer.parseInt(gifts[i].split(",")[1]); j++) {
					if(j == rank) {
						resultMap.put("giftType", gifts[i].split(",")[2]);
						resultMap.put("giftId", gifts[i].split(",")[3]);
						break;
					}
				}
			}
			
			return resultMap;
		}
	
	// 미션 - 특정 등수의 경품 가격(db) 가져오기.
	public static HashMap<String, Object> getGiftPriceByRank_mission(String mission, int rank) throws Exception {
		SqlMapClient sqlMapper = Server.getSqlMapper();
		HashMap<String, Object> map = getGiftDetailByRank_mission(mission, rank);
		
		if(((String)map.get("giftType")).equals("현물")) {
			GiftDao gift = (GiftDao)sqlMapper.queryForObject("gift_selectGiftById", (String)map.get("giftId"));
			map.clear();
			map.put("price", (int)(double)Double.parseDouble(String.valueOf(gift.getPrice())));
			map.put("gift", gift.getName());
			map.put("img", gift.getImg_savname());
			
		} else if(((String)map.get("giftType")).equals("모바일상품권")) {
			GiftCardDao gift = (GiftCardDao)sqlMapper.queryForObject("card_selectCardByNo", Integer.parseInt((String)map.get("giftId")));
			map.clear();
			map.put("price", (int)(double)Double.parseDouble(String.valueOf(gift.getCard_price())));
			map.put("gift", gift.getCard_name());
			map.put("img", gift.getCard_img_savname());
		}
		
		return map;
	}
	
	// 미션 - 모든 미션 당첨 등수 구하기.
	public static List<Integer> getWinRankNum_mission(String mission) {
		List<Integer> list = new ArrayList<Integer>();
		String[] gifts = mission.split("/")[2].split("\\|");
		
		for(int i = 0; i < gifts.length; i++) {
			for(int j = Integer.parseInt(gifts[i].split(",")[0]); j <= Integer.parseInt(gifts[i].split(",")[1]); j++ ) {
				list.add(j);
			}
		}
		
		return list;
	}
	
	// 미션 - 경품 종류에 따른 아이디리스트 가져오기(중복있는경우 하나만).
	public static List<Object> getGiftIdList_mission(String mission, String giftType) {
		List<Object> giftList = new ArrayList<Object>();
		String[] giftStr = mission.split("/")[2].split("\\|");
		
		for(int i = 0; i < giftStr.length; i++) {
			if(giftStr[i].split(",")[2].equals(giftType)) {
				Object giftId = giftStr[i].split(",")[3];
				if(i > 0) {
					boolean isSame = false;
					for(int j = 0; j < giftList.size(); j++) {
						if(giftList.get(j).equals(giftId) ) {
							isSame = true;
						}
					}
					if(!isSame) {
						giftList.add(giftId);
					}
				}else{
					giftList.add(giftId);
				}
			}
		}
		return giftList;
	}
	
	// 미션 - 맨 마지막 경품 대상등수 구하기.
	public static int getLastWinRank_mission(String mission) {
		String[] gifts = mission.split("/")[2].split("\\|");
		return Integer.parseInt(gifts[gifts.length-1].split(",")[1]);
	}
	
	// 미션 - 경품 종류의 수.
	public static int getGiftCount_mission(String mission) {
		return mission.split("/")[2].split("\\|").length;
	}
	
	// 미션 - 경품 - sql용 limit start.
	public static int getLimitStart_mission(String gift) {
		return Integer.parseInt(gift.split(",")[0]) - 1;
	}
	
	// 미션 - 경품 - sql용 limit end.
	public static int getLimitEnd_mission(String gift) {
		int start = Integer.parseInt(gift.split(",")[0]);
		int end = Integer.parseInt(gift.split(",")[1]);
		return (Math.abs((start - end))) + 1;
	}
}
